package movEat.IGui;


import java.util.HashMap;
import java.util.Map;

import movEat.Definitions.MovieDB;
import movEat.Definitions.MovieLink;
import movEat.Definitions.TVshowDB;
import movEat.Definitions.TvShowLink;
import movEat.Definitions.actorDB;
import movEat.Generic.IError;
import movEat.Generic.IProgress;
import movEat.IGui.OrderDetails.IOrderDetails;
import movEat.IKernel.*;


public interface IGui {

	//opens the window.
	public void open();

	//informs the UI update has began.
	public void updateBegin();

	//while updating, the thread the writes to the DataBase will inform the UI about the //progress using this method.
	//need to decide if SetProgress will get int as parameter indicates the percent, or //will get an object indicates the progress (כמה נשאר מתוך כמה שהתחיל )
	public void SetProgress(IProgress progress);

	//we need to define Result class. It will hold the information about the result we got from the query.
	public void SetQueryResult(IQueryResult res);

	// when called an error message will apear to the user
	public void SetError(IError error);
		
	// there will be a part in the UI where messages to the user will appear.
	public void SetMessage(String message);

	public void SetKernel(IKernel kernel);
	
	public IOrderDetails GetOrderDetails();

	public MovieDB getMovieToEdit();

	public void setMoviesFoundForEdit(Map<Integer,MovieDB> moviesFoundInverse);
	
	public void setActorsFoundForEdit(Map<Integer, String> actorsFound);

	public TVshowDB getTvShowToEdit();

	public void setTvShowsFoundForEdit(Map<Integer, TVshowDB> tvShowsFound);

	public Integer getSelectedMovieID();

	public MovieDB getEditedMovie();
	
	public actorDB getNewActor();
	
	public MovieDB getNewMovie();
	
	public TVshowDB getNewTvShow();
	
	public MovieLink getActorMovieLink();
		
	public Integer getSelectedActorID();

	public String getEditedActor();

	public Integer getSelectedTvShowID();

	public TVshowDB getEditedTvShow();

	public MovieDB getMovieToAdd();

	public actorDB getActorToEdit();

	public actorDB getActorParametersForAddConnection();
	
	public void setActorsFoundForAddConnection(Map<Integer, String> actorsFound);

	public int getMovieIDForAddConnection();
	
	public int getActorIDForAddConnection();

	public void setMoviesFoundForAddConnection(Map<Integer, MovieDB> moviesFound);

	public MovieDB getMovieParametersForAddConnection();

	public actorDB getActorParametersForMainCourse();

	public void setActorsFoundForMainCourse(Map<Integer, String> actorsFound);

	public String getDBFilesPath();

	public void close();

}
